package cn.tedu.eb_film.redis;



import cn.tedu.eb_film.pojo.vo.MovieListVO;
import cn.tedu.eb_film.pojo.vo.MovieStandardVO;

import java.util.List;

public interface IMovieRedisRepository {
    /**
     * 数据详情的Key的前缀
     */
    String ITEM_KEY_PREFIX = "movie:item:";
    /**
     * 所有数据详情的Key的集合的Key
     */
    String ALL_ITEM_KEYS_KEY = "movie:all-item-keys";
    /**
     * 数据列表的Key
     */
    String LIST_KEY = "movie:list";

    /**
     * 向Redis中新增电影详情数据
     *
     * @param movieStandardVO 电影详情数据
     */
    void save(MovieStandardVO movieStandardVO);


    /**
     * 从Redis中读取出电影详情数据
     *
     * @param id 电影数据的id
     * @return 匹配的电影详情数据，如果没有匹配的数据，则返回null
     */
    MovieStandardVO get(Long id);

    /**
     * 删除Redis中的电影详情数据
     *
     * @param id 尝试删除的电影数据的id
     * @return 删除成功时将返回true，否则返回false
     */
    Boolean delete(Long id);

    /**
     * 删除Redis中的电影列表数据
     *
     * @return 删除成功时将返回true，否则返回false
     */
    Boolean deleteList();


    /**
     * 删除Redis中的全部电影详情数据
     *
     * @return 成功删除的数据的数量
     */
    long deleteAllItem();
    /**
     * 向Redis中追加电影列表数据
     *
     * @param movieList 电影列表数据
     */
    void save(List<MovieListVO> movieList);

    /**
     * 从Redis中读取电影列表数据
     *
     * @return 电影列表
     */
    List<MovieListVO> list();
    /**
     * 从Redis中读取电影列表数据
     *
     * @param start 起始位置的下标，如果从头开始读取，则取值为0
     * @param end   结果位置的下标，如果读取至最后一条数据，则取值为-1
     * @return 电影列表
     */
    List<MovieListVO> list(Long start,Long end);

    Long countRelease();

    List<MovieListVO> listPage(Long start,Long end);

}
